#ifndef NET_UTILS
#define NET_UTILS

/**
 * @brief: 初始化，调用一次即可
 */
void net_deley_init();

/**
 * @brief: 获取本机到其他节点的延迟
 * @param ips : 其他节点ip列表
 * @param size: ip列表的长度
 * @return : 本机到ips列表每个节点的延迟，单位为us
 */
int *get_net_delay(int size, char **ips);

/**
 * @brief: 获取本机到其他节点的平均延迟
 * @param ips : 其他节点ip列表
 * @param size: ip列表的长度
 * @return : 本机到ips列表每个节点的平均延迟
 */
double get_average_delay(int size, char **ips);

/**
 * @brief: 发送ping结果函数给master
 * @param dest_ip: master的ip
 * @param dest_port : master收数据的端口
 * @param ips : 其他节点ip列表
 * @param ret : 对应ip的延时结果
 * @param ips_count: ip列表的长度
 * @return : 本机到ips列表每个节点的平均延迟
 */
int send_ping_results(char *dest_ip, int dest_port, char **ips, int *ret, int ips_count);

/**
 * @brief: 销毁网络延迟模块的分配的资源，不在使用该模块时退出调用
 */
void net_deley_destroy();

// 网络带宽
#ifdef __cplusplus
extern "C"
{
#endif
    // 带宽测试结果结构体
    typedef struct
    {
        double bandwidth_upload; // 带宽
        double bandwidth_download;

    } iperf_result_t;

    /**
     * 执行带宽测试
     * @param host 目标服务器IP或主机名
     * @param port 目标服务器端口, iperf服务端默认20080
     * @param duration 测试持续时间（秒）
     * @return iperf_result_t 包含带宽结果或错误信息的结构体
     */
    iperf_result_t iperf_measure_bandwidth(const char *host, int port, int duration);

#ifdef __cplusplus
}
#endif

#endif // !NET_UTILS
